﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using DataAccess;

namespace BusinessLogic
{
    public class Administrador : Persona
    {
        #region CONSTRUCTORES
        public Administrador() { }
        public Administrador(long pNro, string pMail, string pNom, string pAp, string pTel, string pInt, string pSec, string pPass) 
            : base( pNro,  pMail,  pNom,  pAp,  pTel,  pInt,  pSec,  pPass)
        {}

        #endregion

        #region METODOS

        //Agregar nuevo Administrador.
        public void addAdministrador()
        {
            ControllerAdministrador.getInstancia().insertAdministrador((Int32)this.NroFuncionario, this.Nombre, this.Apellido, this.Telefono, this.Interno, this.Mail, this.Seccion);

        }

        //Dar Administrador por numero de funcionario.
        public static Administrador getAdministradorByNro(long pNro)
        {
            DataTable dt = ControllerAdministrador.getInstancia().getAdministradorByNro((Int32)pNro);
            //Se parsea y devuelve al tipo Administrador solo el primer item de la lista porque 
            //solo puede haber uno, ya que la consulta utilizada es por numnero de funcionario.
            return ((Persona.parseRegToPersona(dt)).Count() != 0) ? Administrador.Parse((Persona.parseRegToPersona(dt))[0]) : null;

        }

        //Dar Administrador por nombre.
        public static List<Administrador> getAdministradorByName(string pNom, string pAp)
        {
            DataTable dt = ControllerAdministrador.getInstancia().getAdministradorByName(pNom, pAp);
            List<Persona> lstP = Persona.parseRegToPersona(dt);
            //Se castea la lista de "personas" a una de "administradores"
            List<Administrador> lstA = lstP.Cast<Administrador>().ToList();
            //Se retorna la lista de administradores con el nombre y apellido requeridos.
            return lstA;
        }

        //Dar administradores por estado.
        public static List<Administrador> getAdministradoresByEstado(bool pEstado)
        {
            DataTable dt = ControllerAdministrador.getInstancia().getAdministradoresByEstado(pEstado);
            List<Persona> lstP = Persona.parseRegToPersona(dt);
            //Se castea la lista de "personas" a una de "administradores"
            List<Administrador> lstA = lstP.Cast<Administrador>().ToList();
            //Se retorna la lista de administradores con el estado requerido.
            return lstA;
        }

        //Parsear del Tipo Persona a Administrador.
        public static Administrador Parse(Persona p)
        {
            Administrador unA = new Administrador();
            unA.NroFuncionario = p.NroFuncionario;
            unA.Nombre = p.Nombre;
            unA.Apellido = p.Apellido;
            unA.Telefono = p.Telefono;
            unA.Interno = p.Interno;
            unA.Mail = p.Mail;
            unA.Seccion = p.Seccion;
            unA.Contrasenia = p.Contrasenia;
            unA.Activo = p.Activo;

            return unA;
        }

        #endregion
    }
}
